iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
Vue.js

用 Nuxt Content 搭配 Obsidian 建立自己的 Digital Garden系列 第 8

建立特別的頁面與顯示對應的內容

  • 分享至 

  • xImage
  •  

試寫了幾篇文章後,也會想為網站新增一些特別的頁面,像是文章列表、關於等,可能會需要用到 Vue Component 去做一些特殊功能的頁面。但目前我們就只會顯示有在 @/content/ 目錄下新增 Markdown 文件的內容,那我們就會這些特殊頁面做點前置準備與說明吧。

在 Nuxt 的概念裡,是路徑即路由,我在 @/pages/ 下新增什麼 Vue Component,網址就會是其檔案名稱。例如,我新增了 @/page/ariticles.vue,那就可以透過 localhost:3000/articles 去訪問。

但這時候回去看 Nuxt Content 的專案,裡面其實也就只有一個 [...slug].vue 的頁面,那我新增的內容,怎麼有辦法被訪問到呢?其實 [...slug] 這個檔名,就是告訴 Nuxt 說,只要是沒有存在其檔案的路徑,都使用這個 Vue Component 渲染。這也就是為什麼我們不用另外建立頁面去顯示內容的緣故。

開啟 [...slug].vue 來看其程式碼:

<template>
  <main>
    <ContentDoc />
  </main>
</template>

而其中的 <ContentDoc /> 就是指渲染對應到 @/content/ 相同路徑下的 Markdown 檔案。

例如,我訪問了路徑 localhost:3000/about/me ,那麽透過 Nuxt 機制,因為我的 pages 下並沒有相關對應的 Vue Components,那我就會改用 [...slug].vue 去渲染,並藉由 <ContentDoc /> 去渲染 @/content/about/me.md 的檔案。

我也可以新增其頁面,像是建立 @/pages/about/me.vue,並編寫程式碼如下:

<template>
  <main>
    <h1>About Me</h1>
    <ContentDoc />
  </main>
</template>

那相比其他沒有 Vue Component 的路徑,我在訪問 localhost:3000/about/me 就會自帶一個 About Me 的標題,再去渲染 @/content/about/me.md 的檔案。

實際訪問時,發現多了一個內文:

Document not found, overwrite this content with #not-found slot in <ContentDoc>.

那就是指 <ContentDoc /> 元件並沒有找到這個檔案 @/content/about/me.md,只要新增該檔案與內容即可。

若是只新增檔案沒有內容,依然會有類似的錯誤。

新增些許內容後就會正常顯示了。


上一篇
讓網站樣式渲染變得更好閱讀
下一篇
加入 Layout,讓編排版面更容易
系列文
用 Nuxt Content 搭配 Obsidian 建立自己的 Digital Garden30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言